/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * CPainelBd.java
 *
 * Created on 19/09/2010, 09:35:01
 */
package rpt.bd.cenario;

import java.awt.Color;
import java.awt.Component;
import java.awt.event.FocusEvent;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JasperPrint;
import rpt.lib.relatorio.CRelatorioBasico;
import rpt.lib.relatorio.CRelatorioBasicoCenario;

/**
 *
 * @author Roberto
 */
public class CPainelBd extends CPainel {

    protected CPersistenciaBd fPersistenciaBd = null;
    protected CEstruturaRegistroBd fEstruturaRegistroBd = null;
    protected boolean fRepintar = false;
    protected Object[] fOpcoesTipoRelatorio = null;
    protected Object[] fOpcoesEscopoRelatorio = null;
    protected int fNumTipoRelatorio = -1;
    protected int fNumEscopoRelatorio = -1;

    /**
     * 
     */
    public CPainelBd() {
        super();
        initComponents();
        setBackground(new Color(230, 230, 230));
        setForeground(new Color(0, 0, 0));
    }

    /**
     * 
     * @param aPersistenciaBd 
     */
    public CPainelBd(CPersistenciaBdCenario aPersistenciaBd) {
        this();
        fPersistenciaBd = aPersistenciaBd;
    }
    /*
    @Override
    public void paintComponent(Graphics g) {
    if (fRepintar) repintar(g);
    super.paintComponent(g);
    }
    
    public void repintar(Graphics g) {
    fPersistenciaBd.getConjuntoDadosBd().recarregarConjuntoDados();
    fRepintar = false;
    }
     */

    /**
     * 
     */
    public void preparar() {
        //if (fEstruturaRegistroBd == null) return;
        fPersistenciaBd.setEstruturaRegistroBd(
                getEstruturaRegistroBd());
        fPersistenciaBd.setLiberarEdicao(false, false);
        addFocusListener(new java.awt.event.FocusAdapter() {

            @Override
            public void focusGained(java.awt.event.FocusEvent evt) {
                sincronizarMestre(evt);
            }
        });
    }

    /**
     * 
     * @param evt 
     */
    private void sincronizarMestre(
            final FocusEvent evt) {
        fPersistenciaBd.sincronizarMestre();
    }

    /**
     * 
     * @param aPersistenciaBd 
     */
    public void setPertinenciaBd(
            final CPersistenciaBdCenario aPersistenciaBd) {
        fPersistenciaBd = aPersistenciaBd;
    }

    /**
     * 
     * @return 
     */
    public CPersistenciaBd getPersistenciaBd() {
        return fPersistenciaBd;
    }

    /**
     * 
     * @return 
     */
    public CBotaoGeral getBotaoGeral1() {
        return null;
    }

    /**
     * 
     * @return 
     */
    public CBotaoGeral getBotaoGeral2() {
        return null;
    }

    /**
     * 
     * @return 
     */
    public CBotaoGeral getBotaoGeral3() {
        return null;
    }

    /**
     * 
     * @param aECRBD
     * @return 
     */
    public CEstruturaCampoRegistroBd adic(
            final CEstruturaCampoRegistroBd aECRBD) {
        fEstruturaRegistroBd.adicionarEstruturaCampoRegistroBd(aECRBD);
        return aECRBD;
    }

    /**
     * 
     * @param aTitulo
     * @param aNomeBd
     * @param aComponenteCampo
     * @param aValorOriginal
     * @param aTipoCampo
     * @param aCampoGradeBd
     * @param aCampoObrigatorio
     * @param aLarguraGrade
     * @param aEditavel
     * @param aSelect
     * @param aInsert
     * @param aUpdate
     * @param aPosicaoColunaRelatorio
     * @param aLarguraColunaRelatorio
     * @return 
     */
    public CEstruturaCampoRegistroBd adic(
            //CEstruturaRegistroBdCenario aEstruturaRegistroBd,
            final String aTitulo,
            final String aNomeBd,
            final Component aComponenteCampo,
            final String aValorOriginal,
            final ETipoCampoBd aTipoCampo,
            final boolean aCampoGradeBd,
            final boolean aCampoObrigatorio,
            final int aLarguraGrade,
            final boolean aEditavel,
            final boolean aSelect,
            final boolean aInsert,
            final boolean aUpdate,
            final int aPosicaoColunaRelatorio,
            final int aLarguraColunaRelatorio) {
        //
        if (fEstruturaRegistroBd == null) {
            return null;
        }
        CEstruturaCampoRegistroBd e =
                new CEstruturaCampoRegistroBd(
                fEstruturaRegistroBd,
                aTitulo,
                aNomeBd,
                aComponenteCampo,
                aValorOriginal,
                aTipoCampo,
                aCampoGradeBd,
                aCampoObrigatorio,
                aLarguraGrade,
                aEditavel,
                aSelect,
                aInsert,
                aUpdate,
                aPosicaoColunaRelatorio,
                aLarguraColunaRelatorio);
        fEstruturaRegistroBd.adicionarEstruturaCampoRegistroBd(e);
        return e;
    }

    /**
     * 
     * @param aNomeBd
     * @param aTipoCampoBd
     * @return 
     */
    public CEstruturaCampoRegistroBd adic(String aNomeBd, ETipoCampoBd aTipoCampoBd) {
        return adic(
                null, aNomeBd, null, null, aTipoCampoBd, false, false,
                -1, false, true, false, false, -1, -1);
    }

    /**
     * 
     * @param aECRBDL
     * @return 
     */
    public CEstruturaCampoRegistroBdLookup adicLookup(CEstruturaCampoRegistroBdLookup aECRBDL) {
        fEstruturaRegistroBd.adicionarEstruturaCampoRegistroBd(aECRBDL);
        return aECRBDL;
    }

    /**
     * 
     * @param aTitulo
     * @param aNomeBd
     * @param aComponenteCampo
     * @param aValorOriginal
     * @param aTipoCampo
     * @param aCampoGradeBd
     * @param aCampoObrigatorio
     * @param aLarguraGrade
     * @param aEditavel
     * @param aSelect
     * @param aInsert
     * @param aUpdate
     * @param aPosicaoColunaRelatorio
     * @param aLarguraColunaRelatorio
     * @param aNomeTabela
     * @param aAliasTabela
     * @param aNomeCampoId
     * @param aNomeCampoDescricao
     * @param aCondicao
     * @return 
     */
    public CEstruturaCampoRegistroBdLookup adicLookup(
            //CEstruturaRegistroBdCenario aEstruturaRegistroBd,
            String aTitulo,
            String aNomeBd,
            Component aComponenteCampo,
            String aValorOriginal,
            ETipoCampoBd aTipoCampo,
            boolean aCampoGradeBd,
            boolean aCampoObrigatorio,
            int aLarguraGrade,
            boolean aEditavel,
            boolean aSelect,
            boolean aInsert,
            boolean aUpdate,
            int aPosicaoColunaRelatorio,
            int aLarguraColunaRelatorio,
            String aNomeTabela,
            String aAliasTabela,
            String aNomeCampoId,
            String aNomeCampoDescricao,
            Object aCondicao) {
        //
        CEstruturaCampoRegistroBdLookup e =
                new CEstruturaCampoRegistroBdLookup(
                fEstruturaRegistroBd, aTitulo, aNomeBd,
                aComponenteCampo,
                aValorOriginal, aTipoCampo, aCampoGradeBd, aCampoObrigatorio,
                10, aEditavel, aSelect, aInsert, aUpdate,
                aNomeTabela, aAliasTabela, aNomeCampoId, aNomeCampoDescricao, aCondicao,
                aPosicaoColunaRelatorio,
                aLarguraColunaRelatorio);
        fEstruturaRegistroBd.adicionarEstruturaCampoRegistroBd(e);
        return e;
    }

    /**
     * 
     */
    /**************************************************************************/
    /***                                                                    ***/
    /**************************************************************************/
    public String getQuerySelecionar(
            final String aCondicaoExterna) {
        return null;
    }

    /**
     * 
     */
    public void acaoBotaoGeral1() {
    }

    /**
     * 
     */
    public void acaoBotaoGeral2() {
    }

    /**
     * 
     */
    public void acaoBotaoGeral3() {
    }

    /**
     * 
     */
    public void eventoAntesInserirRegistro() {
    }

    /*
     * 
     */
    public void eventoDepoisInserirRegistro(
            final CRegistro aRegistro) {
    }

    /*
     * 
     */
    public void eventoAntesMoverRegistro() {
    }

    /**
     * 
     * @param aRegistro 
     */
    public void eventoDepoisMoverRegistro(
            final CRegistro aRegistro) {
    }

    /*
     * 
     */
    public void eventoAntesGravarRegistro() {
    }

    /**
     * 
     * @param aRegistro 
     */
    public void eventoDepoisGravarRegistro(
            final CRegistro aRegistro, 
            final EStatusOperacao aStatusOperacao, 
            final int vResultado) {
    }

    /**
     * 
     */
    public void eventoAntesPreparacao() {
    }

    /**
     * 
     */
    public void eventoDepoisPreparacao() {
    }

    /**
     * 
     * @param aRegistro 
     */
    public void eventoAntesAtualizarPainelBd(CRegistro aRegistro) {
    }

    /**
     * 
     * @param aRegistro 
     */
    public void eventoDepoisAtualizarPainelBd(CRegistro aRegistro) {
    }

    /**
     * 
     * @param vEstruturaCampoRegistroBd
     * @return 
     */
    public boolean componenteVisualLiberado(CEstruturaCampoRegistroBd vEstruturaCampoRegistroBd) {
        return true;
    }

    /**
     * 
     * @return 
     */
    protected Object[] getOpcoesTipoRelatorio() {
        if (fOpcoesTipoRelatorio == null) {
            Object[] o = {"Básico", "Cancelar"};
            fOpcoesTipoRelatorio = o;
        }
        return fOpcoesTipoRelatorio;
    }

    /**
     * 
     * @return 
     */
    protected Object[] getOpcoesEscopoRelatorio() {
        if (fOpcoesEscopoRelatorio == null) {
            Object[] o = {"Todos","Filtrar","Cancelar"};
            fOpcoesEscopoRelatorio = o;
        }
        return fOpcoesEscopoRelatorio;
    }

    /**
     * 
     * @param aMensagem
     * @param aTitulo
     * @param aOpcoesRelatorio
     * @return 
     */
    protected int dialogoOpcoesRelatorio(
            final String aMensagem,
            final String aTitulo,
            final Object[] aOpcoesRelatorio) {
        int tp = JOptionPane.showOptionDialog(
                null,
                aMensagem,
                aTitulo,
                JOptionPane.DEFAULT_OPTION,
                JOptionPane.QUESTION_MESSAGE,
                null,
                aOpcoesRelatorio,
                aOpcoesRelatorio[aOpcoesRelatorio.length - 1]);
        return tp;
    }

    /**
     * 
     * @return 
     */
    protected int dialogoTipoRelatorio() {
        return dialogoOpcoesRelatorio(
                "Selecione o tipo de relatório desejado.",
                "OPÇÕES DE TIPO DE RELATÓRIO",
                getOpcoesTipoRelatorio());
        /*
        fOpcoesTipoRelatorio = getOpcoesRelatorio();
        fNumTipoRelatorio = JOptionPane.showOptionDialog(
        null,
        "Selecione o Relatório Desejado.",
        "OPÇÕES DE RELATÓRIO",
        JOptionPane.DEFAULT_OPTION,
        JOptionPane.QUESTION_MESSAGE,
        null,
        fOpcoesTipoRelatorio,
        fOpcoesTipoRelatorio[fOpcoesTipoRelatorio.length-1]);
        return fNumTipoRelatorio;
         *
         */
    }

    /**
     * 
     * @return 
     */
    protected int dialogoEscopoRelatorio() {
        return dialogoOpcoesRelatorio(
                "Selecione o filtro desejado.",
                "OPÇÕES DE FILTO DE RELATÓRIO",
                getOpcoesEscopoRelatorio());
    }
    
    /**
     * 
     */
    
    public boolean getOpcoes() {
        boolean ok = false;
        fNumTipoRelatorio = dialogoTipoRelatorio();
        if (fOpcoesTipoRelatorio != null)
            if (fNumTipoRelatorio == (fOpcoesTipoRelatorio.length - 1))
                return false;
        fNumEscopoRelatorio = dialogoEscopoRelatorio();
        if (fOpcoesEscopoRelatorio == null) 
            if (fNumEscopoRelatorio == (fOpcoesEscopoRelatorio.length - 1))
                return false;
        return true;
    }

    /**
     * 
     * @param aLiberarPreparacao
     * @return 
     */
    public CRelatorioBasicoCenario getRelatorio(final boolean aLiberarPreparacao) {
        CRelatorioBasicoCenario rbc = getBaseRelatorio(aLiberarPreparacao);
        if (rbc != null) {
            rbc.getTituloRelatorio().setDefaultValueExpression(
                    rbc.expressao("\"" + getTituloRelatorio(rbc) + "\"", String.class));
        }
        return rbc;
    }

    /**
     * 
     */
    /*
    public CRelatorioBasicoCenario getRelatorio(CCenarioBdEdicao aCenarioBd) {
    return getRelatorio();
    }
     */
    /**
     * 
     * @param aLiberarPreparacao
     * @return 
     */
    public CRelatorioBasicoCenario getBaseRelatorio(
            final boolean aLiberarPreparacao) {
        //titulo(getTituloRelatorio());
        //dataHoje();
        return null;
    }

    /**
     * 
     * @return 
     */
    public JasperPrint getJasperPrint() {
        JasperPrint jp = getBaseJasperPrint();
        if (jp != null) {
            //jd.getTituloRelatorio().setDefaultValueExpression(
            //jd.expressao("\""+getTituloRelatorio(rbc)+"\"",String.class));
        }
        return jp;
    }

    /**
     * 
     * @return 
     */
    public JasperPrint getBaseJasperPrint() {
        //titulo(getTituloRelatorio());
        //dataHoje();
        return null;
    }

    /**
     * 
     * @param aRelatorioBasico
     * @return 
     */
    public String getTituloRelatorio(CRelatorioBasico aRelatorioBasico) {
        return "";
    }

    /**
     * 
     * @return 
     */
    public boolean getRolar() {
        return true;
    }

    /**
     * 
     * @return 
     */
    public CEstruturaRegistroBd getEstruturaRegistroBd() {
        return criarEstruturaRegistroBd();
    }

    /**
     * 
     * @return 
     */
    public CEstruturaRegistroBd criarEstruturaRegistroBd() {
        return new CEstruturaRegistroBd(fPersistenciaBd);
    }

    /**
     * 
     */
    public void limparComponentes() {
        for (CEstruturaCampoRegistroBd e : fEstruturaRegistroBd.getCamposEstruturaRegistroBd()) {
            e.setValorComponente(null);
        }
    }

    /**
     * 
     */
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );
    }// </editor-fold>//GEN-END:initComponents
    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables
}
